﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SIMCObjetoNegocio
{ //ADM_REGBALANCES
    public partial class PortafolioBalancePosicion
    {
        public int IdPortafolio { get; set; }//cba_iportafolio OJO NO ESTA EN EL QUERY HAY QUE COLOCARLO
        public DateTime FechaBalance { get; set; }//cba_fbalance
        public ActivoPasivo APEnum
        {
            get 
            {
                if (this.AP == "A") 
                    return SIMCObjetoNegocio.ActivoPasivo.Activo;
                return SIMCObjetoNegocio.ActivoPasivo.Pasivo;
            }
        }         //* orden 1
        public TipoPosicion TipoGenericoEnum
        {
            get 
            {
                switch (TipoGenerico)
                {
                    case "01": return TipoPosicion.AccionesComunes;
                    case "02": return TipoPosicion.AccionesPreferidas;
                    case "OPTR": return TipoPosicion.OperacionesTransito;
                    case "04": return TipoPosicion.ADR_ADS;
                    case "11": return TipoPosicion.ValoresRentaFija;
                    case "03": return TipoPosicion.FondosMutuales;
                    case "12": return TipoPosicion.OperacionesFinanciamientoPlazo;
                    case "21": return TipoPosicion.OpcionCompra;
                    case "22": return TipoPosicion.OpcionVenta;
                    case "00": return TipoPosicion.EfectivoVista;
                    default: return TipoPosicion.TipoNoDisponible;
                }
            }
        }//cba_stp_gen EN EL ENUMERABLE ESTAN LOS CODIGOS * orden 3
        public string TipoDetallado
        {
            get
            {
                if ((TipoGenericoEnum == TipoPosicion.AccionesComunes) ||
                    (TipoGenericoEnum == TipoPosicion.AccionesPreferidas) ||
                    (TipoGenericoEnum == TipoPosicion.FondosMutuales) ||
                    (TipoGenericoEnum == TipoPosicion.ADR_ADS) ||
                    (TipoGenericoEnum == TipoPosicion.ValoresRentaFija) ||
                    (TipoGenericoEnum == TipoPosicion.OperacionesFinanciamientoPlazo)
                    )
                {
                    return _TipoGenericoDetallado;
                }
                return TipoGenericoEnum.Imprimir();
            }
        }
        public string DivisaPosicion { get; set; }//cba_sdivisa * orden 2 
        public string TipoDeInstrumento { get; set; }//cba_stp_valor
        public string Valor { get; set; }//cba_svalor  (Id de la cuenta)
        public int Custodia { get; set; }//cba_icustodio
        public string Descripcion { get; set; }//cba_sdescripcion *
        
        public decimal CantidadDecimal { get; set; }/////cba_dif_cant
        public double? PrecioMercado { get; set; }//cba_dif_precio
        public decimal? InteresesCausados { get; set; }//cba_mif_int_x_cob 
        public decimal? ValorPosicion { get; set; }//cba_mif_realizacion // Cantidad * precio (MONTO)
        public double? CostoAdquisicion { get; set; }//cba_dif_prom
        public decimal? UtilidadNoRealizada { get; set; }//cba_mif_rev_acum
        public double? TasaDeCambioABase { get; set; }//cba_dtasa
        public decimal? ValorPosicionBase { get; set; }//cba_mif_tot_base
        public double? Cantidad
        {
            get
            {
                return _Cantidad;
            }
            set
            {
                _Cantidad = value;
                CantidadDecimal = Convert.ToDecimal(value);
            }
        }//cba_dif_cant 

        public double? PorcentajeUtilidadNoRealizada 
        {
            get 
            {
                double? x = (Cantidad * CostoAdquisicion);
                if (x > 0)
                {
                    double? y = Convert.ToDouble(UtilidadNoRealizada);
                    return ((y - x) / x);
                }
                else
                { return 0; }
            }
        }
        public decimal? PorcentajeDelActivo { get; set; }

        public decimal? ValorAdquisicion
        {
            get { return ValorPosicion - UtilidadNoRealizada; }
        }

        public decimal? MontoEnDivisa
        {
            get { return ValorPosicion + InteresesCausados; }
        }
    }

    public partial class PortafolioBalancePosicion
    {
        public string TipoGenerico { get; set; }
        public string AP;//cba_act_pas
        private double? _Cantidad;
        public string _TipoGenericoDetallado { get; set; }
    }
}
